package com.sky.annotation;

/**
 * @Description AutoFill
 * @Author Olivia
 * @Date 2025-02-08  19:54
 */

import com.sky.enumeration.OperationType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解，用于标识某个方法需要进行功能字段自动填充处理

 * @interface 关键字： 这是定义注解类型的关键。
 * @Retention 元注解： 这个元注解是 必须的。它定义了注解的保留策略，即注解的生命周期。
 *
 * RetentionPolicy.SOURCE: 注解只保留在源代码中，编译后会被丢弃。 通常用于编译器指令，例如 @Override。
 *
 * RetentionPolicy.CLASS: 注解保留在编译后的 .class 文件中，但在运行时不可用。
 *
 * RetentionPolicy.RUNTIME: 注解保留在 .class 文件中，并且在运行时可以通过反射机制访问。这是自定义注解中最常用的保留策略，因为你可以编写代码来读取和处理注解信息。
 *
 * @Target 元注解： 这个元注解通常明确指定注解可以应用的目标类型，以提高代码的类型安全性和可读性。
 *
 * ElementType.TYPE: 类、接口、枚举、注解类型
 *
 * ElementType.FIELD: 字段（成员变量）
 *
 * ElementType.METHOD: 方法
 *
 * ElementType.PARAMETER: 方法参数
 *
 * ElementType.CONSTRUCTOR: 构造函数
 *
 * ElementType.LOCAL_VARIABLE: 局部变量
 *
 * ElementType.ANNOTATION_TYPE: 注解类型本身
 *
 * ElementType.PACKAGE: 包
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {
    //数据库操作类型：UPDATE INSERT
    OperationType value();
}
